package com.ruixi.spring.aop;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test {
    public static void main(String[] args) {
        //因为全部交由Spring进行管理了,所以在获取对象时,也要通过Spring进行获取,否则AOP不产生效果
        ApplicationContext ac = new ClassPathXmlApplicationContext("conf/aop.xml");
        //由于使用的是动态代理,但代理对象和目标对象之间是不能相互转化的,所以这里接收的是共同实现的接口,即获取的是代理对象
        MathI math = ac.getBean("mathImpl", MathI.class);

        //可以看到返回的类名为产生的代理对象的类名
        String name = math.getClass().getName();
        System.out.println(name);

        int result = math.div(4, 1);
        System.out.println(result);

        //该类不需要实现接口的原因是:因为导入的cglib包,如果没有实现接口,它可以使用继承来实现功能,该类的父类为Object
//        TestHandler testHandler = ac.getBean("testHandler", TestHandler.class);
//        testHandler.test();
    }
}
